﻿using PmSoft;
using System;
using System.Collections.Generic;
using static Modules.Project.ProjectConstants;

namespace ManagementApi.Models.Common
{
    /// <summary>
    /// 公共Service
    /// </summary>
    [UseDI(ServiceLifetime.Scoped)]
    public class CommonService
    {
        public CommonService() { }

        /// <summary>
        /// 将行业分类及项目分类组装成Tree
        /// </summary>
        /// <returns></returns>
        public IEnumerable<VueTree<int>> GetIndustryTypesTree()
        {
            // 将枚举的名称和值组装成一个List
            List<VueTree<int>> trees = Enum.GetValues(typeof(行业主管部门))
                                        .Cast<行业主管部门>()
                                        .Select(data => new VueTree<int> { Label = data.ToString(), Value = (int)data }).ToList();
            for (int i = 0; i < trees.Count(); i++)
            {
                var item = trees[i];
                switch ((行业主管部门)item.Value)
                {
                    case 行业主管部门.住建:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.房屋建筑工程.GetDescription(),Value=(int)项目分类.房屋建筑工程 },
                            new VueTree<int>{Label= 项目分类.市政公用工程.GetDescription(),Value=(int)项目分类.市政公用工程 },
                            new VueTree<int>{Label= 项目分类.机电安装工程.GetDescription(),Value=(int)项目分类.机电安装工程 },
                            new VueTree<int>{Label= 项目分类.装饰装修工程.GetDescription(),Value=(int)项目分类.装饰装修工程 },
                            new VueTree<int>{Label= 项目分类.轨道交通.GetDescription(),Value=(int)项目分类.轨道交通 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.交通:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.公路工程.GetDescription(),Value=(int)项目分类.公路工程 },
                            new VueTree<int>{Label= 项目分类.机电安装工程.GetDescription(),Value=(int)项目分类.机电安装工程 },
                            new VueTree<int>{Label= 项目分类.港口与航道工程.GetDescription(),Value=(int)项目分类.港口与航道工程 },
                            new VueTree<int>{Label= 项目分类.公路养护.GetDescription(),Value=(int)项目分类.公路养护 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 },
                        };
                        break;
                    case 行业主管部门.水利:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.水利水电工程.GetDescription(),Value=(int)项目分类.水利水电工程 },
                            new VueTree<int>{Label= 项目分类.机电安装工程.GetDescription(),Value=(int)项目分类.机电安装工程 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 },
                        };
                        break;
                    case 行业主管部门.国土自然资源:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.矿山工程.GetDescription(),Value=(int)项目分类.矿山工程 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.通信:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.通信工程.GetDescription(),Value=(int)项目分类.通信工程 },
                            new VueTree<int>{Label= 项目分类.机电安装工程.GetDescription(),Value=(int)项目分类.机电安装工程 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.农业_农村:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.林业:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.植树造林.GetDescription(),Value=(int)项目分类.植树造林 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.铁路:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.铁路工程.GetDescription(),Value=(int)项目分类.铁路工程 },
                            new VueTree<int>{Label= 项目分类.机电安装.GetDescription(),Value=(int)项目分类.机电安装 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.民航:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.港口与航道工程.GetDescription(),Value=(int)项目分类.港口与航道工程 },
                            //new VueTree<int>{Label= 项目分类.房屋建筑工程.GetDescription(),Value=(int)项目分类.房屋建筑工程 },
                            new VueTree<int>{Label= 项目分类.机电安装工程.GetDescription(),Value=(int)项目分类.机电安装工程 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    case 行业主管部门.中石油:
                        item.Children = new List<VueTree<int>>()
                        {
                            new VueTree<int>{Label= 项目分类.化工石油工程.GetDescription(),Value=(int)项目分类.化工石油工程 },
                            new VueTree<int>{Label= 项目分类.冶炼工程.GetDescription(),Value=(int)项目分类.冶炼工程 },
                            new VueTree<int>{Label= 项目分类.其他.GetDescription(),Value=(int)项目分类.其他 }
                        };
                        break;
                    default:
                        break;
                }
            }
            return trees;
        }
    }
}
